//
// We have to do some macro tricks to convert this C++ enum into a list of strings
// that we can pass into lua
//
#if (!defined(QS_KEY_H) || defined(GENERATE_ENUM_STRINGS) )
#define QS_KEY_H

#include "detail/QSEnumToString.h"

namespace QS
{

	BEGIN_ENUM(Key)
	{
		DECL_ENUM_ELEMENT(None),

		//letters
		DECL_ENUM_ELEMENT(A),
		DECL_ENUM_ELEMENT(B),
		DECL_ENUM_ELEMENT(C),
		DECL_ENUM_ELEMENT(D),
		DECL_ENUM_ELEMENT(E),
		DECL_ENUM_ELEMENT(F),
		DECL_ENUM_ELEMENT(G),
		DECL_ENUM_ELEMENT(H),
		DECL_ENUM_ELEMENT(I),
		DECL_ENUM_ELEMENT(J),
		DECL_ENUM_ELEMENT(K),
		DECL_ENUM_ELEMENT(L),
		DECL_ENUM_ELEMENT(M),
		DECL_ENUM_ELEMENT(N),
		DECL_ENUM_ELEMENT(O),
		DECL_ENUM_ELEMENT(P),
		DECL_ENUM_ELEMENT(Q),
		DECL_ENUM_ELEMENT(R),
		DECL_ENUM_ELEMENT(S),
		DECL_ENUM_ELEMENT(T),
		DECL_ENUM_ELEMENT(U),
		DECL_ENUM_ELEMENT(V),
		DECL_ENUM_ELEMENT(W),
		DECL_ENUM_ELEMENT(X),
		DECL_ENUM_ELEMENT(Y),
		DECL_ENUM_ELEMENT(Z),

		//numbers
		DECL_ENUM_ELEMENT(NumPad0),
		DECL_ENUM_ELEMENT(NumPad1),
		DECL_ENUM_ELEMENT(NumPad2),
		DECL_ENUM_ELEMENT(NumPad3),
		DECL_ENUM_ELEMENT(NumPad4),
		DECL_ENUM_ELEMENT(NumPad5),
		DECL_ENUM_ELEMENT(NumPad6),
		DECL_ENUM_ELEMENT(NumPad7),
		DECL_ENUM_ELEMENT(NumPad8),
		DECL_ENUM_ELEMENT(NumPad9),

		DECL_ENUM_ELEMENT(Num0),
		DECL_ENUM_ELEMENT(Num1),
		DECL_ENUM_ELEMENT(Num2),
		DECL_ENUM_ELEMENT(Num3),
		DECL_ENUM_ELEMENT(Num4),
		DECL_ENUM_ELEMENT(Num5),
		DECL_ENUM_ELEMENT(Num6),
		DECL_ENUM_ELEMENT(Num7),
		DECL_ENUM_ELEMENT(Num8),
		DECL_ENUM_ELEMENT(Num9),

		//punctuation
		DECL_ENUM_ELEMENT(Tilde),
		DECL_ENUM_ELEMENT(LeftBracket),
		DECL_ENUM_ELEMENT(RightBracket),
		DECL_ENUM_ELEMENT(Period),
		DECL_ENUM_ELEMENT(Comma),
		DECL_ENUM_ELEMENT(Semicolon),
		DECL_ENUM_ELEMENT(Apostrophe),
		DECL_ENUM_ELEMENT(Slash),
		DECL_ENUM_ELEMENT(BackSlash),
		DECL_ENUM_ELEMENT(Equals),
		DECL_ENUM_ELEMENT(Minus),

		//functions
		DECL_ENUM_ELEMENT(F0),
		DECL_ENUM_ELEMENT(F1),
		DECL_ENUM_ELEMENT(F2),
		DECL_ENUM_ELEMENT(F3),
		DECL_ENUM_ELEMENT(F4),
		DECL_ENUM_ELEMENT(F5),
		DECL_ENUM_ELEMENT(F6),
		DECL_ENUM_ELEMENT(F7),
		DECL_ENUM_ELEMENT(F8),
		DECL_ENUM_ELEMENT(F9),
		DECL_ENUM_ELEMENT(F10),
		DECL_ENUM_ELEMENT(F11),
		DECL_ENUM_ELEMENT(F12),

		//meta
		DECL_ENUM_ELEMENT(Shift),
		DECL_ENUM_ELEMENT(Control),
		DECL_ENUM_ELEMENT(CapsLock),

		//editing
		DECL_ENUM_ELEMENT(Escape),
		DECL_ENUM_ELEMENT(Backspace),
		DECL_ENUM_ELEMENT(Enter),
		DECL_ENUM_ELEMENT(Insert),
		DECL_ENUM_ELEMENT(Delete),
		DECL_ENUM_ELEMENT(Space),

		//navigation
		DECL_ENUM_ELEMENT(Home),
		DECL_ENUM_ELEMENT(End),
		DECL_ENUM_ELEMENT(PageUp),
		DECL_ENUM_ELEMENT(PageDown),
		DECL_ENUM_ELEMENT(UpArrow),
		DECL_ENUM_ELEMENT(DownArrow),
		DECL_ENUM_ELEMENT(LeftArrow),
		DECL_ENUM_ELEMENT(RightArrow),
		DECL_ENUM_ELEMENT(Tab)
	}
	END_ENUM(Key)

}

#endif